home *** CD-ROM | disk | FTP | other *** search
/ IRIX Patches 1995 June / SGI IRIX Patches 1995 Jun.iso / 5.3_patches / patchSG0000281 / patchSG0000281.idb / usr / include / sys / dmi.h.z / dmi.h
Encoding:
C/C++ Source or Header  |  1995-06-12  |  12.2 KB  |  674 lines

  1. /**************************************************************************
  2.  *                                      *
  3.  *          Copyright (C) 1994, Silicon Graphics, Inc.              *
  4.  *                                      *
  5.  *  These coded instructions, statements, and computer programs  contain  *
  6.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  7.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  8.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  9.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  10.  *                                      *
  11.  **************************************************************************/
  12.  
  13. #ifndef _SYS_DMI_H
  14. #define _SYS_DMI_H
  15.  
  16.  
  17. /*
  18.  *  Events
  19.  */
  20.  
  21. typedef enum {
  22.     DM_EVENT_INVALID    = 0,
  23.     DM_EVENT_MOUNT        = 1,
  24.     DM_EVENT_PREUNMOUNT    = 2,
  25.     DM_EVENT_UNMOUNT    = 3,
  26.     DM_EVENT_DEBUT        = 4,
  27.     DM_EVENT_CREATE        = 5,
  28.     DM_EVENT_6        = 6,
  29.     DM_EVENT_POSTCREATE    = 7,
  30.     DM_EVENT_REMOVE        = 8,
  31.     DM_EVENT_POSTREMOVE    = 9,
  32.     DM_EVENT_RENAME        = 10,
  33.     DM_EVENT_POSTRENAME    = 11,
  34.     DM_EVENT_LINK        = 12,
  35.     DM_EVENT_POSTLINK    = 13,
  36.     DM_EVENT_SYMLINK    = 14,
  37.     DM_EVENT_POSTSYMLINK    = 15,
  38.     DM_EVENT_READ        = 16,
  39.     DM_EVENT_WRITE        = 17,
  40.     DM_EVENT_TRUNCATE    = 18,
  41.     DM_EVENT_ATTRIBUTE    = 19,
  42.     DM_EVENT_DESTROY    = 20,
  43.     DM_EVENT_NOSPACE    = 21,
  44.     DM_EVENT_USER        = 22,
  45.     DM_EVENT_MAX        = 23,
  46.     DM_EVENT_24        = 24,
  47.     DM_EVENT_25        = 25,
  48.     DM_EVENT_26        = 26,
  49.     DM_EVENT_27        = 27,
  50.     DM_EVENT_28        = 28,
  51.     DM_EVENT_29        = 29,
  52.     DM_EVENT_30        = 30,
  53.     DM_EVENT_31        = 31
  54. } dm_eventtype_t;
  55.  
  56.  
  57. /*
  58.  *  Elemental types
  59.  */
  60.  
  61. typedef int        dm_token_t;
  62. typedef    int        dm_sessid_t;
  63. typedef __uint64_t    dm_size_t;
  64. typedef __int64_t    dm_ssize_t;
  65. typedef __int64_t    dm_off_t;
  66. typedef __int64_t    dm_attrloc_t;
  67.  
  68. #define    DM_INVALID_TOKEN    0
  69. #define    DM_NO_TOKEN        (-1)
  70.  
  71.  
  72. /*
  73.  *  Variable length data descriptor
  74.  */
  75.  
  76. typedef struct dm_vardata {
  77.     int    vd_offset;    /* offset from start of containing struct */
  78.     u_int    vd_length;    /* length of data starting at vd_offset */
  79. } dm_vardata_t;
  80.  
  81. #define    vd_off    vd_offset
  82. #define    vd_len    vd_length
  83.  
  84.  
  85. /*
  86.  *  Event messages
  87.  */
  88.  
  89. typedef    struct dm_eventmsg {
  90.     int        _link;        /* offset to next dm_eventmsg_t */
  91.     dm_eventtype_t    ev_type;    /* event type */
  92.     int        ev_reserved;
  93.     dm_token_t    ev_token;    /* token for event */
  94.     dm_vardata_t    ev_data;    /* the event-specific variable data */
  95. } dm_eventmsg_t;
  96.  
  97.  
  98. /*
  99.  *  Types for dm_send_msg()
  100.  */
  101.  
  102. typedef enum {
  103.     DM_MSGTYPE_INVALID,
  104.     DM_MSGTYPE_SYNC,
  105.     DM_MSGTYPE_ASYNC
  106. } dm_msgtype_t;
  107.  
  108.  
  109. /*
  110.  *  Managed regions
  111.  */
  112.  
  113. typedef struct dm_region {
  114.     dm_off_t    rg_offset;
  115.     dm_size_t    rg_size;
  116.     u_int        rg_flags;
  117.     u_int        rg_padding;
  118. } dm_region_t;
  119.  
  120. /* Values for rg_flags */
  121. #define    DM_REGION_NOEVENT    0x0
  122. #define    DM_REGION_READ        0x1
  123. #define    DM_REGION_WRITE        0x2
  124. #define    DM_REGION_TRUNCATE    0x4
  125.  
  126.  
  127. /*
  128.  *  Extents
  129.  */
  130.  
  131. typedef enum {
  132.     DM_EXTTYPE_INVALID,
  133.     DM_EXTTYPE_RES,
  134.     DM_EXTTYPE_HOLE
  135. } dm_extenttype_t;
  136.  
  137. typedef struct dm_extent {
  138.     dm_extenttype_t    ex_type;
  139.     u_int        ex_padding;
  140.     dm_off_t    ex_offset;
  141.     dm_size_t    ex_length;
  142. } dm_extent_t;
  143.  
  144.  
  145. /*
  146.  *  Configuration options
  147.  */
  148.  
  149. typedef enum {
  150.     DM_CONFIG_INVALID,
  151.     DM_CONFIG_MAX_ATTRIBUTE_SIZE,
  152.     DM_CONFIG_MAX_MANAGED_REGIONS,
  153.     DM_CONFIG_MAX_MESSAGE_DATA,
  154.     DM_CONFIG_PERS_ATTRIBUTES,
  155.     DM_CONFIG_PERS_EVENTS,
  156.     DM_CONFIG_PERS_MANAGED_REGIONS,
  157.     DM_CONFIG_PUNCH_HOLE,
  158.     DM_CONFIG_TOTAL_ATTRIBUTE_SPACE,
  159.     DM_CONFIG_WILL_RETRY
  160. } dm_config_t;
  161.  
  162.  
  163. /*
  164.  *  Event lists are defined as bitmasks with the event number (normally
  165.  *  an opaque datum) corresponding to the bit set in the mask.  This is
  166.  *  directly based on select(2).
  167.  */
  168.  
  169. #ifndef NBBY        /* number of bits per byte */
  170. #define NBBY 8
  171. #endif
  172.  
  173. typedef    unsigned int    dm_evmask;
  174.  
  175. #define    NEVBITS    (sizeof(dm_evmask) * NBBY)    /* bits per mask */
  176.  
  177. #ifndef    howmany
  178. #define    howmany(x, y)    (((x)+((y)-1))/(y))
  179. #endif
  180.  
  181. typedef    struct dm_eventset {
  182.     dm_evmask    es_bits[howmany(DM_EVENT_MAX, NEVBITS)];
  183. } dm_eventset_t;
  184.  
  185. #define    DMEV_SET(n, p)    ((p)->es_bits[(n)/NEVBITS] |=  (1 << ((n) % NEVBITS)))
  186. #define    DMEV_CLR(n, p)    ((p)->es_bits[(n)/NEVBITS] &= ~(1 << ((n) % NEVBITS)))
  187. #define    DMEV_ISSET(n, p)((p)->es_bits[(n)/NEVBITS] &   (1 << ((n) % NEVBITS)))
  188.  
  189. #define    DMEV_ZERO(p)    bzero((char *)(p), sizeof *(p))
  190.  
  191.  
  192. typedef struct dm_dispinfo {
  193.     dm_vardata_t    di_fshandle;
  194.     dm_eventset_t    di_eventset;
  195. } dm_dispinfo_t;
  196.  
  197.  
  198. /*
  199.  *  File attributes
  200.  */
  201.  
  202. /*
  203.  *  Mask values for mask argument to dm_get_fileattr,
  204.  *  dm_get_bulkattr, and dm_get_dirattrs.
  205.  */
  206.  
  207. #define    DM_AT_HANDLE    0x0001
  208. #define    DM_AT_EMASK    0x0002
  209. #define    DM_AT_PMANR    0x0004
  210. #define    DM_AT_PATTR    0x0008
  211. #define    DM_AT_DTIMES    0x0010
  212. #define    DM_AT_CFLAG    0x0020
  213. #define    DM_AT_STAT    0x0040
  214.  
  215. /*
  216.  *  Mask values for mask argument to dm_set_fileattr.
  217.  */
  218.  
  219. #define    DM_AT_MODE    0x0001
  220. #define    DM_AT_UID    0x0002
  221. #define    DM_AT_GID    0x0004
  222. #define    DM_AT_ATIME    0x0008
  223. #define    DM_AT_MTIME    0x0010
  224. #define    DM_AT_CTIME    0x0020
  225. #define    DM_AT_DTIME    0x0040
  226.  
  227.  
  228. /* The dm_fileattr structure is only used by dm_set_fileattr */
  229.  
  230. typedef struct dm_fileattr {
  231.     mode_t        fa_mode;
  232.     uid_t        fa_uid;
  233.     gid_t        fa_gid;
  234.     time_t        fa_atime;
  235.     time_t        fa_mtime;
  236.     time_t        fa_ctime;
  237.     time_t        fa_dtime;
  238.     int        fa_spare;
  239. } dm_fileattr_t;
  240.  
  241. /*
  242.  *  The dm_stat structure is used for retrieving per-file attributes via
  243.  *  the dm_get_fileattrs(), dm_get_dirattrs() and dm_get_bulkattr() calls.
  244.  */
  245. typedef struct dm_stat {
  246.     int        _link;
  247.     dm_vardata_t    dt_handle;
  248.     dm_vardata_t    dt_compname;    /* file name; dm_get_dirattrs only */
  249.     dm_eventset_t    dt_emask;
  250.     int        dt_nevents;
  251.     u_short        dt_dmstate;
  252.     u_char        dt_pers;
  253.     u_char        dt_pmanreg;
  254.     time_t        dt_dtime;
  255.     dm_size_t    dt_spare1;
  256.  
  257.     dev_t        dt_dev;
  258.     ino64_t        dt_ino;
  259.     u_int        dt_igen;
  260.     mode_t        dt_mode;
  261.     nlink_t        dt_nlink;
  262.     uid_t        dt_uid;
  263.     gid_t        dt_gid;
  264.     dev_t        dt_rdev;
  265.     dm_off_t    dt_size;
  266.     time_t        dt_atime;
  267.     time_t        dt_mtime;
  268.     time_t        dt_ctime;
  269.     u_int        dt_blksize;
  270.     dm_size_t    dt_blocks;
  271.  
  272.     u_int        dt_xflags;
  273.     u_int        dt_extsize;
  274.     u_int        dt_extents;
  275.     u_int        dt_padding;
  276.     dm_size_t    dt_spare2;
  277. } dm_stat_t;
  278.  
  279.  
  280. #ifndef _KERNEL
  281.  
  282. /*
  283.  *  Prototype used in the library.
  284.  */
  285.  
  286. int        dmi (int opcode, ...);
  287.  
  288. #endif    /* notdef _KERNEL */
  289.  
  290.  
  291. /*
  292.  *  Opcodes for dmi syscall.
  293.  */
  294.  
  295. #define    DM_PATH_TO_HANDLE    1
  296. #define    DM_PATH_TO_FSHANDLE    2
  297. #define    DM_FD_TO_HANDLE        3
  298. #define    DM_HANDLE_TO_PATH    4
  299. #define    DM_CREATE_SESSION    5
  300. #define    DM_DESTROY_SESSION    6
  301. #define    DM_SEND_MSG        7
  302. #define    DM_GET_EVENT        8
  303. #define    DM_RESPOND_EVENT    9
  304. #define    DM_READ_INVIS        10
  305. #define    DM_WRITE_INVIS        11
  306. #define    DM_SET_EVENTLIST    12
  307. #define    DM_SET_DISP        13
  308. #define    DM_CREATE_USEREVENT    14
  309. #define    DM_ASSOC_HANDLE        15
  310. #define    DM_DISASSOC_HANDLE    16
  311. #define    DM_QUERY_TOKEN        17
  312. #define    DM_GETALL_SESSIONS    18
  313. #define    DM_GETALL_TOKENS    19
  314. #define    DM_GET_EVENTLIST    20
  315. #define    DM_FIND_EVENTMSG    21
  316. #define    DM_QUERY_SESSION    22
  317. #define    DM_GET_MOUNTINFO    23
  318. #define    DM_MOVE_EVENT        24
  319. #define    DM_PROBE_HOLE        25
  320. #define    DM_PUNCH_HOLE        26
  321. #define    DM_GET_FILEATTR        27
  322. #define    DM_SET_FILEATTR        28
  323. #define    DM_GET_BULKATTR        29
  324. #define    DM_GET_DIRATTRS        30
  325. #define    DM_GET_ALLOCINFO    31
  326.  
  327. /*
  328.  *  Action codes for dm_respond_event().
  329.  */
  330.  
  331. typedef enum {
  332.     DM_RESP_INVALID,
  333.     DM_RESP_CONTINUE,
  334.     DM_RESP_ABORT,
  335.     DM_RESP_DONTCARE,
  336.     DM_RESP_RETRY
  337. } dm_response_t;
  338.  
  339.  
  340. /*
  341.  *  Prototypes.
  342.  */
  343.  
  344. int    dm_init_service (void);
  345.  
  346. int    dm_get_config (
  347.         void        *hanp,
  348.         size_t        hlen,
  349.         dm_config_t    flagname,
  350.         dm_size_t    *retvalp);
  351.  
  352. int    dm_path_to_handle (
  353.         char        *path,
  354.         void        **hanp,
  355.         size_t        *hlen);
  356.  
  357. int    dm_path_to_fshandle (
  358.         char        *path,
  359.         void        **hanp,
  360.         size_t        *hlen);
  361.  
  362. int    dm_fd_to_handle (
  363.         int        fd,
  364.         void        **hanp,
  365.         size_t        *hlen);
  366.  
  367. int    dm_handle_to_fshandle (
  368.         void        *hanp,
  369.         size_t        hlen,
  370.         void        **fshanp,
  371.         size_t        *fshlen);
  372.  
  373. int    dm_handle_to_path (
  374.         void        *dirhanp,
  375.         size_t        dirhlen,
  376.         void        *targhanp,
  377.         size_t        targhlen,
  378.         size_t        buflen,
  379.         char        *bufp,
  380.         size_t        *rlenp);
  381.  
  382. int    dm_handle_cmp (
  383.         void        *hanp1,
  384.         size_t        hlen1,
  385.         void        *hanp2,
  386.         size_t        hlen2);
  387.  
  388. u_int    dm_handle_hash (
  389.         void        *hanp,
  390.         size_t        hlen);
  391.  
  392. void    dm_handle_free (
  393.         void        *hanp,
  394.         size_t        hlen);
  395.  
  396. u_int    dm_get_ino (
  397.         void        *hanp,
  398.         size_t        hlen);
  399.  
  400. u_int    dm_get_igen (
  401.         void        *hanp,
  402.         size_t        hlen);
  403.  
  404. int    dm_create_session (
  405.         dm_sessid_t    old,
  406.         char        *info,
  407.         dm_sessid_t    *new);
  408.  
  409. int    dm_destroy_session (
  410.         dm_sessid_t    sid);
  411.  
  412. int    dm_getall_sessions (
  413.         u_int        nelem,
  414.         dm_sessid_t    *sidp,
  415.         u_int        *nelemp);
  416.  
  417. int    dm_query_session (
  418.         dm_sessid_t    sid,
  419.         size_t        buflen,
  420.         void        *bufp,
  421.         size_t        *rlenp);
  422.  
  423. int    dm_get_mountinfo (
  424.         dm_sessid_t    sid,
  425.         void        *hanp,
  426.         size_t        hlen,
  427.         size_t        buflen,
  428.         void        *bufp,
  429.         size_t        *rlenp);
  430.  
  431. int    dm_get_events (
  432.         dm_sessid_t    sid,
  433.         u_int        maxmsgs,
  434.         int        nowait,
  435.         size_t        buflen,
  436.         void        *msgbuf,
  437.         size_t        *rlenp);
  438.  
  439. int    dm_respond_event (
  440.         dm_sessid_t    sid,
  441.         dm_token_t    token,
  442.         dm_response_t    response,
  443.         int        error);
  444.  
  445. int    dm_read_invis (
  446.         dm_sessid_t    sid,
  447.         void        *hanp,
  448.         size_t        hlen,
  449.         dm_token_t    token,
  450.         dm_off_t    offset,
  451.         dm_size_t    length,
  452.         char        *buf);
  453.  
  454. int    dm_write_invis (
  455.         dm_sessid_t    sid,
  456.         void        *hanp,
  457.         size_t        hlen,
  458.         dm_token_t    token,
  459.         dm_off_t    offset,
  460.         dm_size_t    length,
  461.         char        *buf);
  462.  
  463. int    dm_get_eventlist (
  464.         dm_sessid_t    sid,
  465.         void        *hanp,
  466.         size_t        hlen,
  467.         dm_token_t    token,
  468.         u_int        nelem,
  469.         dm_eventset_t    *evsetp,
  470.         u_int        *nelemp);
  471.  
  472. int    dm_set_eventlist (
  473.         dm_sessid_t    sid,
  474.         void        *hanp,
  475.         size_t        hlen,
  476.         dm_token_t    token,
  477.         dm_eventset_t    *evsetp,
  478.         u_int        evsetsize);
  479.  
  480. int    dm_set_disp (
  481.         dm_sessid_t    sid,
  482.         void        *hanp,
  483.         size_t        hlen,
  484.         dm_token_t    token,
  485.         dm_eventset_t    *evsetp,
  486.         u_int        evsetsize);
  487.  
  488. int    dm_create_userevent (
  489.         dm_sessid_t    sid,
  490.         size_t        buflen,
  491.         void        *msgdata,
  492.         dm_token_t    *tokenp);
  493.  
  494. int    dm_send_msg (
  495.         dm_sessid_t    sid,
  496.         dm_msgtype_t    msgtype,
  497.         size_t        buflen,
  498.         void        *msgdata);
  499.  
  500. int    dm_move_event (
  501.         dm_sessid_t    srcsid,
  502.         dm_token_t    token,
  503.         dm_sessid_t    targetsid,
  504.         dm_token_t    *rtokenp);
  505.  
  506. int    dm_assoc_handle (
  507.         dm_sessid_t    sid,
  508.         void        *hanp,
  509.         size_t        hlen,
  510.         dm_token_t    token);
  511.  
  512. int    dm_disassoc_handle (
  513.         dm_sessid_t    sid,
  514.         void        *hanp,
  515.         size_t        hlen,
  516.         dm_token_t    token);
  517.  
  518. int    dm_query_token (
  519.         dm_sessid_t    sid,
  520.         void        *hanp,
  521.         size_t        hlen,
  522.         dm_token_t    token,
  523.         u_int        *resultp);
  524.  
  525. int    dm_find_eventmsg (
  526.         dm_sessid_t    sid,
  527.         dm_token_t    token,
  528.         size_t        buflen,
  529.         void        *bufp,
  530.         size_t        *rlenp);
  531.  
  532. int    dm_getall_tokens (
  533.         dm_sessid_t    sid,
  534.         u_int        nelem,
  535.         dm_token_t    *tokenp,
  536.         u_int        *nelemp);
  537.  
  538. int    dm_get_region (
  539.         dm_sessid_t    sid,
  540.         void        *hanp,
  541.         size_t        hlen,
  542.         dm_token_t    token,
  543.         u_int        nelem,
  544.         dm_region_t    *regbufp,
  545.         u_int        *nelemp);
  546.  
  547. int    dm_set_region (
  548.         dm_sessid_t    sid,
  549.         void        *hanp,
  550.         size_t        hlen,
  551.         dm_token_t    token,
  552.         u_int        nelem,
  553.         dm_region_t    *regbufp,
  554.         u_int        *nelemp);
  555.  
  556. int    dm_probe_hole (
  557.         dm_sessid_t    sid,
  558.         void        *hanp,
  559.         size_t        hlen,
  560.         dm_token_t    token,
  561.         dm_off_t    off,
  562.         dm_size_t    len,
  563.         dm_off_t    *roffp,
  564.         dm_size_t    *rlenp);
  565.  
  566. int    dm_punch_hole (
  567.         dm_sessid_t    sid,
  568.         void        *hanp,
  569.         size_t        hlen,
  570.         dm_token_t    token,
  571.         dm_off_t    off,
  572.         dm_size_t    len);
  573.  
  574. int    dm_get_fileattr (
  575.         dm_sessid_t    sid,
  576.         void        *hanp,
  577.         size_t        hlen,
  578.         dm_token_t    token,
  579.         u_int        mask,
  580.         dm_stat_t    *attrp);
  581.  
  582. int    dm_set_fileattr (
  583.         dm_sessid_t    sid,
  584.         void        *hanp,
  585.         size_t        hlen,
  586.         dm_token_t    token,
  587.         u_int        mask,
  588.         dm_fileattr_t    *attrp);
  589.  
  590. int    dm_get_bulkattr (
  591.         dm_sessid_t    sid,
  592.         void        *hanp,
  593.         size_t        hlen,
  594.         dm_token_t    token,
  595.         u_int        mask,
  596.         dm_attrloc_t    *locp,
  597.         size_t        buflen,
  598.         void        *bufp,
  599.         size_t        *rlenp);
  600.  
  601. int    dm_get_dirattrs (
  602.         dm_sessid_t    sid,
  603.         void        *hanp,
  604.         size_t        hlen,
  605.         dm_token_t    token,
  606.         u_int        mask,
  607.         dm_attrloc_t    *locp,
  608.         size_t        buflen,
  609.         void        *bufp,
  610.         size_t        *rlenp);
  611.  
  612. int    dm_init_attrloc (
  613.         dm_sessid_t    sid,
  614.         void        *hanp,
  615.         size_t        hlen,
  616.         dm_token_t    token,
  617.         dm_attrloc_t    *locp);
  618.  
  619. int    dm_get_allocinfo (
  620.         dm_sessid_t    sid,
  621.         void        *hanp,
  622.         size_t        hlen,
  623.         dm_token_t    token,
  624.         dm_off_t    *offp,
  625.         u_int        nelem,
  626.         dm_extent_t    *extentp,
  627.         u_int        *nelemp);
  628.  
  629.  
  630. /*
  631.  *  Misc. defines.
  632.  */
  633.  
  634. #define    DM_GLOBAL_HANP        ((void *)(1))
  635. #define    DM_GLOBAL_HLEN        ((size_t)(1))
  636.  
  637. #define    DM_NO_SESSION        0
  638. #define    DM_MAX_MSG_DATA        3960
  639. #define    DM_SESSION_INFO_LEN    256
  640.  
  641. #define    DM_WAIT            0
  642. #define    DM_NOWAIT        1
  643.  
  644. #define    DM_FALSE        0
  645. #define    DM_TRUE            1
  646.  
  647. #define    DM_GET_VALUE(p, field, type) \
  648.         ((type) ((char *)(p) + (p)->field.vd_off))
  649. #define    DM_GET_LEN(p, field) \
  650.         ((p)->field.vd_len)
  651. #define    DM_STEP_TO_NEXT(p, type) \
  652.         ((type) ((p)->_link ? (char *)(p) + (p)->_link : NULL))
  653.  
  654. /*
  655.  *  Event specific data structures.
  656.  */
  657.  
  658. typedef struct dm_data_event {
  659.     dm_vardata_t    de_handle;
  660.     dm_off_t    de_offset;
  661.     dm_size_t    de_length;
  662. } dm_data_event_t;
  663.  
  664. typedef struct dm_namesp_event {
  665.     dm_vardata_t    ne_handle1;
  666.     dm_vardata_t    ne_handle2;
  667.     dm_vardata_t    ne_name1;
  668.     dm_vardata_t    ne_name2;
  669.     mode_t        ne_mode;
  670.     int        ne_retcode;
  671. } dm_namesp_event_t;
  672.  
  673. #endif    /* _SYS_DMI_H */
  674.